package com.winshare.saleAssistant.service;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.winshare.saleAssistant.domain.dto.req.DataAnalysisQueryDTO;
import com.winshare.saleAssistant.domain.dto.req.UserQueryDTO;
import com.winshare.saleAssistant.model.Sale;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 销售数据 服务类
 * </p>
 *
 * @author stylefeng
 * @since 2020-11-11
 */
public interface ISaleService extends IService<Sale> {
    List<Sale> selectList1();

    com.winshare.saleAssistant.util.Page<Sale> selectSaleByCondition(UserQueryDTO userQueryDTO);

    String getSell(Date starTime, Date endTime, String productName);

    Integer getPSellCount(Date starTime, Date endTime, String productName);

    List<Map<String, Object>> getSaleTotal(String sjType);

    List<Map<String, Object>> getSaleProduct(Date starTime, Date endTime);

    List<Map<String, Object>> getSaleArea(Date starTime, Date endTime);

    List<Sale> getSales(Date starTime, Date endTime, String productName);

    List<Sale> getLuxuryTotalMoney(String productName, Date starTime, Date endTime);

    List<Sale> getTrialTotalMoney(String productName, Date starTime, Date endTime);

    List<Sale> getBasisTotalMoney(String productName, Date starTime, Date endTime);

    List<Sale> getrankingTotal(String areaName, String parentAreaName, String cityName, String productName, Date starTime, Date endTime);

    List<Sale> getrankingMoney(String areaName, String parentAreaName, String cityName, String productName, Date starTime, Date endTime);

    List<Map<String, Object>> getAreaSaleRanking(DataAnalysisQueryDTO dataAnalysisQueryDTO);

    Integer getProductTotal(String parentAreaName, String productName, Date starTime, Date endTime);

    Integer getTeacherTotal(String parentAreaName, String productName, Date starTime, Date endTime);

    Integer getStudentTotal(String parentAreaName, String productName, Date starTime, Date endTime);

    Integer getSchoolTotal();

    Integer getCitySchoolTotal(String cityName);

    List<Sale> getRateOfCoverage(String parentAreaName, String productName, Date starTime, Date endTime);

    List<Sale> getLoginTotal(String parentAreaName, String productName, Date starTime, Date endTime);

    List<Sale> getLogin(String parentAreaName, String productName, Date starTime, Date endTime);

    List<Sale> getProductEmploy(String parentAreaName, String productName, Date starTime, Date endTime);

    List<Map<String, Object>> getExportSale(@Param("page") Page<Map<String, Object>> page);

    /**
     * 自主销售产品销售概况-周
     *
     * @param product_id
     * @return
     */
    List<Map<String, Object>> getSaleTotalWeek(@Param("product_id") Integer product_id);

    /**
     * 自主销售产品销售概况-月
     *
     * @param product_id
     * @return
     */
    List<Map<String, Object>> getSaleTotalMonth(@Param("product_id") Integer product_id);

    /**
     * 自主销售产品销售概况-年
     *
     * @param product_id
     * @return
     */
    List<Map<String, Object>> getSaleTotalYear(@Param("product_id") Integer product_id);

    /**
     * 登录概况-周
     *
     * @param product_id
     * @return
     */
    List<Map<String, Object>> getLoginTotalWeek(@Param("product_id") Integer product_id);

    /**
     * 登录概况-月
     *
     * @param product_id
     * @return
     */
    List<Map<String, Object>> getLoginTotalMonth(@Param("product_id") Integer product_id);

    /**
     * 登录概况-年
     *
     * @param product_id
     * @return
     */
    List<Map<String, Object>> getLoginTotalYear(@Param("product_id") Integer product_id);

    /**
     * 获取导出列表
     *
     * @param areaName
     * @return
     */
    List<Map<String, Object>> getExportList(@Param("areaName") String areaName);


    void deleteBySchoolCode(String schoolCode);

    void deleteByUuid(String id);

    /**
     * 区域情况统计
     *
     * @param productName
     * @param starTime
     * @param endTime
     * @return
     */
    Map<String, Object> getRegionalSituation(@Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);

    /**
     * 各时段登陆次数
     *
     * @param productName
     * @param starTime
     * @param endTime
     * @return
     */
    List<Map<String, Object>> getLoginTime(@Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);

    /**
     * 学校使用排名
     *
     * @param page
     * @param areaName    区域
     * @param productName 产品名称
     * @param starTime    开始时间
     * @param endTime     结束时间
     * @param orderBy     排序方式 activationRate 激活率 loginNum登录次数 useTime使用时长
     * @return
     */
    List<Map<String, Object>> getSchoolUseList(@Param("orderBy") String orderBy, @Param("areaName") String areaName, @Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);

    /**
     * 用户使用排名
     *
     * @param page
     * @param areaName    区域
     * @param productName 产品名称
     * @param starTime    开始时间
     * @param endTime     结束时间
     * @param orderBy     排序方式 activationRate 激活率 loginNum登录次数 useTime使用时长
     * @return
     */
    List<Map<String, Object>> getUserUseList(@Param("orderBy") String orderBy, @Param("areaName") String areaName, @Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);

    /**
     * 功能使用排名
     *
     * @param page
     * @param areaName    区域
     * @param productName 产品名称
     * @param starTime    开始时间
     * @param endTime     结束时间
     * @param orderBy     排序方式 activationRate 激活率 loginNum登录次数 useTime使用时长
     * @return
     */
    List<Map<String, Object>> getFunUseList(@Param("orderBy") String orderBy, @Param("areaName") String areaName, @Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);

    List<Map<String, Object>> getSaleCMStatistical(@Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);

    List<Map<String, Object>> getUserSchoolUseList(@Param("schoolId") Integer schoolId);
}
